<?php
class AppControl extends CommonControl
{
	public $error;
	
	/**
	 * 建立项目
	 */
	function actionCreate()
	{
		if(isset($_POST['ok']))
		{
			$source = array(
				'name' => '',
				'path' => substr(DP_PATH,0,-9),
				'description' => '',
			);
			$this->checkForm($source);
			if(empty($_POST['dp_path'])) $this->error .= 'Duolam目录必须填写<br />';

			if(!is_file($_POST['dp_path'].'d.php')) $this->error .= 'Duolam目录不正确，找不到引导文件';

			if(empty($this->error))
			{
				$path = rtrim($_POST['project_path'],DS);
				$this->md($path);
				foreach($this->_dirList() as $v) $this->md($path . $v);
				file_put_contents($path.'/app/config/config.php', $this->_writeConfigFile());
				file_put_contents($path.'/app/control/IndexControl.php',$this->_writeDefaultContorl());
				file_put_contents($path.'/index.php', $this->_writeIndexFile());
				$this->assign('info','项目已建立完成');
				$this->render('all_right');
				exit;
			}
		}
		$this->assign('error',$this->error);
		$this->render('app/create_app');
	}

	private function checkForm($source)
	{
		$this->matchValue($source['path'],$_POST['project_path'],'使用默认值无效，请设置正确的项目目录');
	}

	private function _dirList()
	{
		return array(
			'/app',
			'/public',
			'/runtime',
			'/themes',
			'/app/action',
			'/app/config',
			'/app/control',
			'/app/extension',
			'/app/component',
			'/app/language',
			'/app/model',
			'/app/module',
			'/app/view',
			'/app/widget',
		);
	}

	private function _writeConfigFile()
	{
return <<<EOF
<?php
return array(

	/**
	 * 应用程序系统参数配置数组
	 */
	'system' => array(

		/**
		 * 应用程序的系统设置
		 * 设置页面输出编码
		 * 设置时区
		 * 是否开启session
		 */
		'charset'          => 'UTF-8',
		'timezone'	       => 'Asia/Shanghai',
		'session_start'    => false,
		'gzip'			   => true,

		/**
		 * 异常错误控制
		 * debug_model 如果为true则为开发模式，否则为生产模式
		 * 开发模式，错误或者异常信息，直接在浏览器中显示出来，并提示错误行数，错误代码等等详细信息
		 * 生产模式，会把错误或者异常信息写入日志，只写入出错信息，浏览器会提示友好信息。
		 */
		'debug_model'       => true,
		'trace_level'       => E_ALL,
	),

	/**
	 * 设置访问应用程序默认的控制器跟动作
	 */
	'access' => array(

		/**
         * url模式 compatible|path
         * 模式compatible为传统方式
         * 模式path为url_rewrite，为path模式
         */
		'url_mode'			=> 'compatible',

		/**
		 * 是否开启路由功能
		 */
		'url_route'         => false,

		/**
		 * 开启路由后的伪静态
		 */
		'url_suffix'        => '.html',

		/**
		 * 路由规则
		 */
		'url_rule'          => array(),

		/**
		 * 是否开启模块功能
		 */
		'open_module'		=> false,

		/**
		 * 2级域名泛解析相关设置
		 * 是否开启2级域名泛解析
		 */
		'domain_open'	  	=> false,
		/**
		 * 不在泛解析范围的2级域名列表
		 */
		'domain_special'	=> array('www'),
		/**
		 * 设置默认访问的控制器
		 * 设置默认访问的动作
		 */
		'default_control'   => 'index',
		'default_action'    => 'index',

		/**
		 * 传统模式的情况下，获取存放路由的变量名称，默认r
		 */
		'route_name'		=> 'r',

		/**
		 * 自定义404文件
		 */
		'file404'		    => '',

	),

	/**
	 * 模板相关设置
	 * 默认主题
	 * 视图后缀
	 * 控制器视图模板路径
	 */
	'views' => array(
		'default_theme'     => 'default',
		'view_suffix'       => '.html',
		'view_ctrl_path'    => '/app/view/',
	),

	/**
	 * 设置要自动加载的类库
	 * 目录分割符为半角句号
	 * 别名分隔符为半角冒号
	 * 文件名不需要带扩展名：.php
	 * 载入某个文件格式：别名:目录.目录.文件名
	 * 载入某个目录的所有文件格式：别名:目录.*
	 * 程序中动态加载的话，建议使用D::import()方法，格式跟配置文件一样
	 */
    'import' => array(),

    /**
     * 应用程序功能组件
     */
    'component' => array(
		'db'    => array(
			'class'  => 'dpDbCommand',
			/**
			 * 数据表架构缓存时间
			 * 0 永久缓存 -1 缓存 单位：秒
			 */
			'schema_caching' => 0,
			'master' => array(
				/**
				 * 如果使用PDO，driver格式如下
				 * pdo:驱动
				 * 例子：
				 * pdo:mysql
				 * 如果使用的是sqlite，则host指定sqlite数据库文件地址
				 */
				'driver'   => 'mysql',
				'host'	   => '',
				'username' => '',
				'passwd'   => '',
				'dbname'   => '',
				'charset'  => '',
				'prefix'   => '',
			),
			'slave'  => array(
			),
		),
		
		'cache' => array(
			/**
			 * 指定缓存类文件，不需要改动
			 */
			'class'        => 'dpCache',
			/**
			 * 使用的缓存系统，自带的缓存系统如下：
			 * fileCache | apcCache | memCache | XCache 
			 * 默认缓存系统：fileCache
			 */
			'cache_type'   => 'fileCache',
			/**
			 * 缓存有效期，默认600秒
			 * 0  为永久缓存
			 * -1 为不缓存
			 */
			'cache_expire' => 600,
		),
    ),
);
?>
EOF;
	}

	private function _writeDefaultContorl()
	{
return <<<EOF
<?php
class IndexControl extends dpControl
{
	function actionIndex()
	{
		echo 'Hello World，Hello Duolam!';
	}
}
?>
EOF;
	}

	private function _writeIndexFile()
	{
		$path = $_POST['dp_path'];
return <<<EOF
<?php

define('APP_PATH',dirname(__FILE__));

include '{$path}d.php';

\$config = include(APP_PATH.'/app/config/config.php');

D::createApplication(\$config);

?>
EOF;
	}
}
?>